package rekursion;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class LinealComponent extends JComponent{
  //die folgenden Felder sind nötig, damit die wichtige Methode
  //striche von Nebensächlichkeiten wie Graphics freigehalten werden
  //kann. Sowas ist im wirklichen Programmiererleben nicht üblich.
  private Line2D linie=new Line2D.Double();
  private Dimension size=new Dimension();
  private Graphics2D g2;
  private int nr;

  public void paintComponent(Graphics g){
    g2=(Graphics2D)g;
    size=getSize(size);
    nr=0;
    lineal(0, size.getWidth(), 5);
  }

  /* Diese Methode macht einen senkrechten Strich der Länge hoch
   * an der waagrechten Stelle x. Wenn numeriert=true, dann wird
   * unter dem Strich angezeigt, der wievielte es ist.
   */
  private void markiere(double x, int hoch, boolean numeriert){
    double h=size.getHeight();
    if(numeriert){
      g2.drawString(""+(nr++),(float)x,(float)h);
      h-=14;
    }
    linie.setLine(x,h,x,h-4*hoch);
    g2.draw(linie);
  }

  /* Die folgende Methode soll von links bis rechts Striche machen.
   * Der mittlere soll die Höhe max haben. Danach sollen die Abschnitte
   * immer weiter halbiert und jeder Mittenstrich um 1 kürzer werden.
   * Verwende die Methode markiere!
   */
  private void lineal(double links, double rechts, int max){
    //System.out.println("links="+links+" rechts="+rechts+" lang="+max);
    if(max>0){
      double mitte=(links+rechts)/2;
      markiere(mitte, max, true);//true sorgt für Nummerierung
    }
  }

  //====== das folgende nur zum Zwecke der schnellen Durchführung ======
  public static void main(String[] args){
    //Erzeuge ein Fenster, das die LinealComponent beinhaltet
    JFrame f=new JFrame();
    LinealComponent lineal=new LinealComponent();
    f.getContentPane().add(lineal);
    f.setBounds(0,0,800,100);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
  }
}
